package util;

import javax.swing.JFrame;
import javax.swing.JPanel;

public abstract class Teclado extends JPanel{

	protected static final long serialVersionUID = 1L;
	protected JFrame _contenedor;
	protected Barrido _estado;
	protected BotonPersonalizado [][] _matrizBotones;
	protected boolean _barrido;
	
	public boolean is_barrido() {
		return _barrido;
	}

	protected int _tiempoBarrido;
	protected int _numFilas;
	protected int _numColumnas;
	
	public Teclado(JFrame contenedor, boolean barrido, int tiempoBarrido, boolean limpiar){
		 _contenedor = contenedor;
		 if (limpiar){
			 _contenedor.dispose();
			 _contenedor = new JFrame();
		 }
		 _barrido = barrido;
		 _tiempoBarrido = tiempoBarrido;
	}
	
    public abstract void init();
    
    public int getNumFilas(){
    	return _numFilas;
    }
    
    public int getNumColumnas(){
    	return _numColumnas;
    }
    
    void setEstado(Barrido barrido){
    	_estado = barrido;
    }
    
    void desactivarTeclado(){
    	for(int i=0; i<getNumFilas(); i++)
    		for(int j=0; j<getNumColumnas(); j++)
    			if(_matrizBotones[i][j]!=null) _matrizBotones[i][j].setEnabled(false);
    }
    
    void activarTeclado(){
    	for(int i=0; i<getNumFilas(); i++)
    		for(int j=0; j<getNumColumnas(); j++)
    			if(_matrizBotones[i][j]!=null) _matrizBotones[i][j].setEnabled(true);
    }
    
    void desactivarBoton(int x, int y){
    	if(_matrizBotones[x][y]!=null) _matrizBotones[x][y].setEnabled(false);
    }
    
    void activarBoton(int x, int y){
    	if(_matrizBotones[x][y]!=null) _matrizBotones[x][y].setEnabled(true);
    }
    
    boolean pintarBotonPosicion(int x, int y){
    	if(_matrizBotones[x][y]!=null){ 
    		_matrizBotones[x][y].seleccionar();
    		return true;
    	}else return false;
    }
    
    boolean hayBotonesValidos(int fila, int posIni, int posFin){
    	for(int i=posIni; i<=posIni+posFin-1; i++){
    		if(_matrizBotones[fila][i]!=null) return true;
    	}
    	return false;
    }
    
    void despintarBotonPosicion(int x, int y){
    	if(_matrizBotones[x][y]!=null) _matrizBotones[x][y].deseleccionar();
    }
    
    void clickBoton(int x, int y){
    	if(_matrizBotones[x][y]!=null) _matrizBotones[x][y].doClick();
    }
    
    void refrescar(){
		_contenedor.pack();
        _contenedor.repaint();
    }
    
    protected void pintarTeclado(){
		 _contenedor.setVisible(true);
		 _contenedor.setFocusableWindowState(false);
		 _contenedor.setContentPane(this);
		 _contenedor.pack();
		 _contenedor.repaint();
		 if (_barrido) new ThreadBarrido(this, _contenedor).start();
    }
    
    protected void iniciarBarrido(){
    	_estado = new BarridoMitad(this, _contenedor, _tiempoBarrido);
    }

	public BotonPersonalizado[][] get_matrizBotones() {
		return _matrizBotones;
	}

	public void set_matrizBotones(BotonPersonalizado[][] matrizBotones) {
		_matrizBotones = matrizBotones;
	}

	public JFrame get_contenedor() {
		return _contenedor;
	}

	public void set_contenedor(JFrame contenedor) {
		_contenedor = contenedor;
	}
	
	public void matarBarrido(){
		_estado.morir();
	}
    
	
}
